package main

import (
	"fmt"
)

//1.一个类型可以实现多个接口
// type Player interface {
// 	playMusic()
// }
// type Video interface {
// 	playVideo()
// }
// type Mobile struct {
// }

// //实现两个接口
// func (m Mobile) playMusic() {
// 	fmt.Println("播放音乐")
// }
// func (m Mobile) playVideo() {
// 	fmt.Println("播放视频")
// }
// func main() {
// 	m := Mobile{}
// 	m.playMusic()
// 	m.playVideo()
// }

//多个类型实现同一个接口 - 多态
// type Pet interface {
// 	eat()
// }
// type Dog struct {
// }
// type Cat struct {
// }

// //实现接口
// func (cat Cat) eat() {
// 	fmt.Println("cat eat...")
// }
// func (dog Dog) eat() {
// 	fmt.Println("dog eat...")
// }
// func main() {
// 	var p Pet
// 	p = Cat{}
// 	p.eat()
// 	p = Dog{}
// 	p.eat()
// }

// 接口嵌套
// 接口可以通过嵌套，创建新的接口。例如：飞鱼，既可以飞，又可以游泳。
// 我们创建一个飞Fly接口，创建一个游泳接口Swim，飞鱼接口有这两个接口组成。
type Flyer interface {
	fly()
}
type Swimmer interface {
	swim()
}
type FlyFish interface {
	Flyer
	Swimmer
}
type Fish struct {
}

func (fish Fish) fly() {
	fmt.Println("fly...")
}
func (fish Fish) Swim() {
	fmt.Println("swim...")
}

// func main() {
// 	var ff FlyFish
// 	ff = Fish{}
// 	ff.fly()
// 	ff.swim()
// }
